Dance - HackMyVM - Hard - Bericht

Hard

Verwendete Tools

arp-scan
nmap
wget
unzip
cd
cat
ssh
su
sudo
espeak
ls

Inhaltsverzeichnis

Reconnaissance

┌──(root㉿cyber)-[~] └─# arp-scan -l
192.168.2.158	08:00:27:e6:ca:a3	PCS Systemtechnik GmbH

Analyse:** Der Befehl `arp-scan -l` wird verwendet, um das lokale Netzwerksegment mittels ARP-Anfragen nach aktiven Geräten zu durchsuchen.

**Bewertung:** Ein Host mit der IP-Adresse `192.168.2.158` wird identifiziert. Die MAC-Adresse (`08:00:27:...`) weist auf eine VirtualBox VM hin. Dies ist das Zielsystem.

**Empfehlung (Pentester):** Ziel-IP `192.168.2.158` notieren und mit Port-Scanning (Nmap) fortfahren.
**Empfehlung (Admin):** Standard-Netzwerkaufklärung. Fokus auf Absicherung der Dienste.

┌──(root㉿cyber)-[~] └─# nmap -sS -sC -T5 -A 192.168.2.158 -p-
Starting Nmap 7.93 ( https://nmap.org ) at 2022-10-20 10:29 CEST
Nmap scan report for dance (192.168.2.158)
Host is up (0.00015s latency).
Not shown: 65532 closed tcp ports (reset)
PORT   STATE SERVICE VERSION
21/tcp open  ftp     vsftpd 3.0.3
| ftp-syst:
[...]
|_ftp-anon: Anonymous FTP login allowed (FTP code 230)
22/tcp open  ssh     OpenSSH 8.4p1 Debian 5 (protocol 2.0)
| ssh-hostkey:
[...]
80/tcp open  http    nginx 1.18.0
|_http-title: Site doesn't have a title (text/html).
|_http-server-header: nginx/1.18.0
MAC Address: 08:00:27:E6:CA:A3 (Oracle VirtualBox virtual NIC)
[...]
OS details: Linux 4.15 - 5.6
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

TRACEROUTE
HOP RTT     ADDRESS
1   0.15 ms dance (192.168.2.158)

Nmap done: 1 IP address (1 host up) scanned in X.XX seconds

**Analyse:** Ein umfassender Nmap-Scan (`-sS`, `-sC`, `-T5`, `-A`, `-p-`) wird auf `192.168.2.158` (dance) durchgeführt.

**Bewertung:** Drei offene TCP-Ports werden identifiziert: * **Port 21 (FTP):** vsftpd 3.0.3. Das Nmap-Skript `ftp-anon` meldet, dass **anonymer Login erlaubt** ist. Dies ist ein kritischer Fund. * **Port 22 (SSH):** OpenSSH 8.4p1 auf Debian 11. Standard-Fernzugriff. * **Port 80 (HTTP):** Nginx 1.18.0. Standard-Webserver ohne spezifischen Titel.

**Empfehlung (Pentester):** 1. **FTP (Priorität 1):** Untersuchen Sie den anonymen FTP-Zugang. Suchen Sie nach Dateien, Verzeichnissen und Schreibrechten. 2. **HTTP (Priorität 2):** Führen Sie Web-Enumeration durch (Gobuster, Nikto), auch wenn die Startseite uninteressant wirkt. Suchen Sie nach Hinweisen auf die Anwendung. 3. **SSH (Priorität 3):** Halten Sie nach Benutzernamen Ausschau.
**Empfehlung (Admin):** Deaktivieren Sie anonymen FTP-Zugriff sofort, falls nicht zwingend erforderlich. Wenn benötigt, konfigurieren Sie ihn extrem restriktiv. Halten Sie alle Dienste aktuell und sicher konfiguriert.

Web LFI Exploitation & Credential Discovery

**Analyse:** Nach der initialen Erkundung wird eine Schwachstelle auf dem Webserver ausgenutzt, um an Konfigurationsdateien und Zugangsdaten zu gelangen. *Hinweis: Die Schritte, die zur Entdeckung dieser LFI/Path-Traversal-Schwachstelle führten (z.B. Gobuster-Scan auf Port 80, der `/music/` fand), fehlen im Log.*

┌──(root㉿Darkspirit)-[~] <-- Anderer Prompt --> └─# wget 'http://192.168.2.132/music/?getAlbum&parent=../../&album=var' -O var.zip
<-- IP passt nicht! Annahme .158 -->
--2022-08-29 19:49:47--  http://192.168.2.158/music/?getAlbum&parent=../../&album=var <-- Korrigierte IP -->
Verbindungsaufbau zu 192.168.2.158:80 … verbunden.
HTTP-Anforderung gesendet, auf Antwort wird gewartet … 200 OK
Länge: nicht spezifiziert [application/zip, application/octet-stream]
Wird in »var.zip« gespeichert.

var.zip                               [ <=>                                ]   9,13M  --.-KB/s    in 0,04s

2022-08-29 19:49:48 (226 MB/s) - »var.zip« gespeichert [9570009]

**Analyse:** Mit `wget` wird eine URL aufgerufen, die stark nach einer **Local File Inclusion (LFI)** oder **Path Traversal** Schwachstelle aussieht. * Der Pfad `/music/` wurde vermutlich zuvor gefunden. * Der Parameter `getAlbum` löst wahrscheinlich eine Aktion aus. * `parent=../../`: Versucht, zwei Verzeichnisebenen nach oben zu navigieren. * `album=var`: Gibt das Zielverzeichnis `/var` an. Die Anwendung scheint den Inhalt des angegebenen Verzeichnisses (`/var`) zu zippen und zum Download anzubieten. *Anmerkung: Die IP-Adresse `.132` im Log ist inkonsistent mit dem Rest, es wird angenommen, dass `.158` gemeint war.*

**Bewertung:** Kritische Schwachstelle! LFI/Path Traversal, die zum Download beliebiger Verzeichnisse führt, auf die der Webserver Leserechte hat. Der erfolgreiche Download von `var.zip` bestätigt die Schwachstelle.

**Empfehlung (Pentester):** Entpacken und analysieren Sie `var.zip`. Suchen Sie nach Konfigurationsdateien, Skripten, Logdateien oder anderen sensiblen Informationen innerhalb der `/var`-Struktur (insbesondere `/var/www`, `/var/log`, `/var/mail`). Nutzen Sie die LFI, um gezielt andere interessante Verzeichnisse herunterzuladen (z.B. `/etc`, `/home`).
**Empfehlung (Admin):** **Beheben Sie die LFI/Path Traversal-Schwachstelle sofort!** Validieren und sanitisieren Sie alle Parameter (`parent`, `album`) rigoros. Beschränken Sie Dateizugriffe auf die vorgesehenen Verzeichnisse (z.B. mit `basename()` und Whitelisting).

┌──(root㉿Darkspirit)-[~] └─# unzip var.zip
┌──(root㉿Darkspirit)-[~/html] └─# cd html/music
<-- Pfad innerhalb des entpackten 'var' -->
┌──(root㉿Darkspirit)-[~/html/music] └─# cat config.php
   
   $_CONFIG['saveConfig'] = '';
   $_CONFIG['users'] = array(
      	    array('admin', 'admin', 'true'),
	    array('guest', 'guest', 'false'),
	    array('aria', 'seraphim', 'false'),
            array('alba', 'thehostof', 'false'),
[...]
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

**Analyse:** Das heruntergeladene Archiv `var.zip` wird entpackt. Innerhalb der Verzeichnisstruktur (vermutlich `var/www/html/music`) wird die Datei `config.php` gefunden und ihr Inhalt angezeigt.

**Bewertung:** Ein **kritischer Fund** durch Ausnutzung der LFI! Die `config.php` enthält hartkodierte Zugangsdaten im Klartext für mehrere Benutzer: `admin:admin`, `guest:guest`, `aria:seraphim`, `alba:thehostof`.

**Empfehlung (Pentester):** Versuchen Sie, sich mit diesen Credentials an verfügbaren Diensten anzumelden, insbesondere SSH (Port 22). Priorisieren Sie `aria` und `alba`.
**Empfehlung (Admin):** **Speichern Sie niemals Zugangsdaten im Klartext in Konfigurationsdateien!** Verwenden Sie Umgebungsvariablen oder sicherere Konfigurationsmanagement-Tools. Beheben Sie die LFI-Schwachstelle.

Initial Access (SSH as aria)

**Analyse:** Nutzung der in `config.php` gefundenen Zugangsdaten für den SSH-Login.

┌──(root㉿cyber)-[~] └─# ssh aria@dance
<-- Hostname aus /etc/hosts -->
aria@dance's password: ******** (seraphim eingegeben)
Linux dance 5.10.0-8-amd64 #1 SMP Debian 5.10.46-4 (2021-08-03) x86_64
[...]
Last login: Tue Sep  7 12:50:06 2021 from 192.168.1.51
aria@dance:~$ <-- Login erfolgreich! -->

**Analyse:** Es wird versucht, sich per SSH als Benutzer `aria` am Zielsystem (`dance`, entspricht `192.168.2.158`) anzumelden. Das Passwort `seraphim` (aus `config.php`) wird verwendet.

**Bewertung:** Fantastisch! Der SSH-Login als `aria` ist erfolgreich. Der initiale Zugriff auf das System wurde durch Ausnutzung der LFI und der daraus resultierenden Credentials erlangt.

**Empfehlung (Pentester):** Führen Sie Enumeration als `aria` durch: User-Flag suchen, `sudo -l` prüfen, Home-Verzeichnis untersuchen.
**Empfehlung (Admin):** LFI beheben, Passwörter ändern, Passwort-Wiederverwendung vermeiden.

*(Hinweis: Der zweite SSH-Befehl im Log (`ssh aria@192.168.2.132`) verwendet wieder die falsche IP und ist redundant/ irrelevant.)*

aria@dance:~$ cat user.txt
godisadj
<-- User Flag -->

**Analyse:** Im Home-Verzeichnis von `aria` wird die Datei `user.txt` gefunden und ausgelesen.

**Bewertung:** User-Flag (`godisadj`) erfolgreich erhalten.

Privilege Escalation (aria -> alba)

**Analyse:** Als Benutzer `aria` wird versucht, die Rechte zum Benutzer `alba` zu eskalieren, dessen Passwort ebenfalls aus der `config.php` bekannt ist.

aria@dance:~$ su -s /bin/bash alba
Password: ******** (thehostof eingegeben)
alba@dance:/home/aria$ # Erfolg!

**Analyse:** Der Befehl `su -s /bin/bash alba` wird verwendet, um zum Benutzer `alba` zu wechseln und dabei direkt eine `/bin/bash`-Shell zu erhalten. Das Passwort `thehostof` (aus `config.php`) wird eingegeben.

**Bewertung:** Der Benutzerwechsel ist erfolgreich. Der Angreifer agiert nun als Benutzer `alba`.

**Empfehlung (Pentester):** Führen Sie Enumeration als `alba` durch, insbesondere `sudo -l`.
**Empfehlung (Admin):** Passwörter ändern, LFI beheben.

Privilege Escalation (alba -> root)

**Analyse:** Als Benutzer `alba` wird nach dem finalen Weg zur Root-Eskalation gesucht.

alba@dance:/home/aria$ sudo -l
User alba may run the following commands on dance:
    (root) NOPASSWD: /usr/bin/espeak
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

**Analyse:** Der Befehl `sudo -l` wird als `alba` ausgeführt.

**Bewertung:** Eine **kritische Sudo-Regel** wird gefunden: `alba` darf den Befehl `/usr/bin/espeak` als `root` ohne Passwort (`NOPASSWD:`) ausführen. `espeak` ist ein Text-to-Speech-Synthesizer.

**Empfehlung (Pentester):** Untersuchen Sie `espeak`. Kann es zum Lesen von Dateien verwendet werden? Prüfen Sie die Optionen (`man espeak`). Die Option `-f ` liest Text aus einer Datei. Da der Befehl als Root ausgeführt wird, kann versucht werden, damit den Inhalt von Root-geschützten Dateien (wie `/root/root.txt`) auszulesen.
**Empfehlung (Admin):** **Entfernen Sie diese Sudo-Regel sofort!** Die Ausführung von Programmen wie `espeak`, die Dateiinhalte verarbeiten können, als Root durch einen unprivilegierten Benutzer ist extrem gefährlich und führt oft zu LFI.

alba@dance:/home/aria$ sudo /usr/bin/espeak -f /root/root.txt -q -X
Translate 'deadcandance'
<-- Root Flag geleakt! -->

**Analyse:** Der Sudo-Befehl wird ausgeführt, um `espeak` als Root zu starten. * `-f /root/root.txt`: Weist `espeak` an, den Inhalt der Root-Flag-Datei zu lesen. * `-q`: (Quiet) Unterdrückt die normale Sprachausgabe. * `-X`: Gibt die Phonem-Mnemonics aus (was oft auch den Klartext enthält).

**Bewertung:** **Root-Eskalation erfolgreich!** Obwohl `espeak` den Text normalerweise vorlesen würde, wird durch die Optionen `-q -X` die Sprachausgabe unterdrückt, aber die Verarbeitung der Datei findet statt. In der Ausgabe "Translate 'deadcandance'" wird der Inhalt der Root-Flag (`deadcandance`) direkt preisgegeben. Dies ist eine klassische LFI über eine unsichere Sudo-Regel.

**Empfehlung (Pentester):** Root-Flag `deadcandance` notiert. Ziel erreicht.
**Empfehlung (Admin):** Sudo-Regel für `espeak` entfernen. Überprüfen Sie alle Sudo-Regeln auf ähnliche Schwachstellen.

Proof of Concept (Sudo Espeak LFI)

**Kurzbeschreibung:** Der Benutzer `alba` hat via `sudo` das Recht, das Programm `/usr/bin/espeak` als `root` ohne Passwort auszuführen. Das Programm `espeak` besitzt die Option `-f`, um Text aus einer Datei zu lesen und für die Sprachausgabe zu verarbeiten. Da der Befehl als `root` läuft, kann `espeak` auf jede Datei zugreifen, auf die Root Zugriff hat, einschließlich sensibler Dateien wie `/root/root.txt`. Durch geschickte Wahl der Optionen (`-q` für leise, `-X` für Phonem-Ausgabe) kann die eigentliche Sprachausgabe unterdrückt werden, während der Inhalt der gelesenen Datei dennoch in der Textausgabe des Programms erscheint (z.B. in der "Translate"-Zeile). Dies stellt eine Local File Inclusion (LFI)-Schwachstelle dar, die durch die unsichere Sudo-Regel ermöglicht wird.

**Voraussetzungen:** Zugriff als Benutzer `alba`, unsichere Sudo-Regel für `espeak`.

**Schritt-für-Schritt-Anleitung:**

  1. Einloggen als `alba` (oder Wechsel zu `alba` mittels `su`).
  2. Ausführen des Befehls: `sudo /usr/bin/espeak -f /pfad/zur/zieldatei -q -X` (z.B. `/root/root.txt`).
  3. Analysieren der Textausgabe auf den Inhalt der Zieldatei.

**Erwartetes Ergebnis:** Der Inhalt der als Root lesbaren Zieldatei wird in der Ausgabe von `espeak` preisgegeben.

**Beweismittel:** Die Sudo-Regel und der erfolgreiche `espeak`-Aufruf, der die Root-Flag ausgibt.

**Risikobewertung:** Hoch. Ermöglicht einem Benutzer mit dieser Sudo-Regel das Auslesen beliebiger Dateien als Root.

**Empfehlungen:** Entfernen Sie die Sudo-Regel für `espeak`. Vergeben Sie Sudo-Rechte nach dem Prinzip der geringsten Rechte und vermeiden Sie Befehle, die Dateiinhalte verarbeiten können, wenn dies nicht absolut notwendig und sicher implementiert ist.

Flags

**Analyse:** Zusammenfassung der gefundenen Flags.

cat /home/aria/user.txt
godisadj

**Bewertung:** User-Flag.

sudo /usr/bin/espeak -f /root/root.txt -q -X
deadcandance

**Bewertung:** Root-Flag.